package com.mocai.merchant.core.mapper;

import java.util.List;
import java.util.Map;

/**
 * Mapper 基础类
 *
 * @author zhangguangyong <a href="#">1243610991@qq.com</a>
 * @date 2017/1/7 23:04
 * @sine 0.0.1
 */
public interface BaseMapper<E, ID> {

    /**
     * 通过主键删除
     *
     * @param id
     * @return
     */
    int deleteByPrimaryKey(ID id);

    /**
     * 批量删除
     *
     * @param ids
     * @return
     */
    int batchDelete(List<ID> ids);

    /**
     * 插入记录
     *
     * @param entity
     * @return
     */
    int insert(E entity);

    /**
     * 批量插入
     *
     * @param entities
     * @return
     */
    int batchInsert(List<E> entities);

    /**
     * 选择性插入记录
     *
     * @param entity
     * @return
     */
    int insertSelective(E entity);

    /**
     * 通过主键查询
     *
     * @param id
     * @return
     */
    E selectByPrimaryKey(ID id);

    /**
     * 根据多个主键查询
     *
     * @param ids
     * @return
     */
    List<E> selectByPrimaryKeys(List<ID> ids);

    /**
     * 查询所有
     *
     * @return
     */
    List<E> selectAll();

    /**
     * 根据实体查询，字符串字段使用Like查询
     *
     * @return
     */
    List<E> selectByEntity(E entity);

    /**
     * 自定义条件查询
     *
     * @param conditions {key:数据库列(例如：username), value: 条件值(例如：is not null, like '%zhang%')}
     * @return
     */
    List<E> selectByConditions(Map conditions);

    /**
     * 统计
     *
     * @return
     */
    Long count();

    /**
     * 通过主键更新
     *
     * @param entity
     * @return
     */
    int updateByPrimaryKey(E entity);

    /**
     * 批量更新
     *
     * @param entities
     * @return
     */
    int batchUpdate(List<E> entities);


    /**
     * 通过主键选择性更新
     *
     * @param entity
     * @return
     */
    int updateByPrimaryKeySelective(E entity);


}
